struct Queue
{
    int start; //队列起点
    int end;   //队列终点
    int maxLen;//队列最大元素个数
    int* data;//队列元素
};

Queue* newQueue(int maxLen)
{
    Queue* q=new Queue;
    q->maxLen=maxLen;
    q->data=new int[maxLen];
    q->start=0;
    q->end=0;
    return q;
}

void deleteQueue(Queue* q)
{
    delete q->data;
    delete q;
}

//入队
void inqueue(Queue* q,int num){
    q->data[q->end]=num;
    q->end++;
    if(q->end>=q->maxLen)
    {
        q->end=0;
    }
}

//出队
int dequeen(Queue* q){
    int num=q->data[q->start];
    q->start++;
    if(q->start>=q->maxLen)
    {
        q->start=0;
    }
    return num;
}

//队列元素多少
int sizeOfQueue(Queue* q)
{
    if(q->start==q->end)
    {
        return 0;
    }
    else{
        int len=q->end-q->start;
        if(len>0)
        {
            return len;
        }
        else{
            return len+q->maxLen;
        }
    }
}

//队列是否为空
int isEmpQueue(Queue* q)
{
    return q->start==q->end;
}